package com.ll.custom;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 刘龙
 * @version 1.0
 */
public class GenericExercise {
    public static void main(String[] args) {
        // List<?> 表示 任意的泛型类型都可以接收
        // public static void printCollection01(List<?> c)
        printCollection01(new ArrayList<>());

        // ? extends AAA 表示上限, 可以接收AAA或者AAA的子类
        // public static void printCollection02(List<? extends AAA> c)
        // CCC是AAA的子类
        printCollection02(new ArrayList<CCC>());
        //错误
        //printCollection02(new ArrayList<Object>());

        // ? super 子类类名AAA: 支持AAA类以及AAA类的父类,不限于直接父类
        // public static void printCollection03(List<? super AAA> c)
        printCollection03(new ArrayList<Object>());
    }

    /**
     * List<?> 表示 任意的泛型类型都可以接收
     */
    public static void printCollection01(List<?> c) {
        for (Object object : c) {
            System.out.println(object);
        }
    }

    /**
     * ? extends AAA 表示上限, 可以接收AAA或者AAA的子类
     */
    public static void printCollection02(List<? extends AAA> c) {
        for (Object object : c) {
            System.out.println(object);
        }
    }

    /**
     * ? super 子类类名AAA: 支持AAA类以及AAA类的父类,不限于直接父类
     */
    public static void printCollection03(List<? super AAA> c) {
        for (Object object : c) {
            System.out.println(object);
        }
    }
}

class AAA {

}

class BBB extends AAA {

}

class CCC extends BBB {

}
